View Javadoc
1   package edu.jiangxin.apktoolbox.file.password.recovery.checker;
2   
3   import org.apache.commons.io.FilenameUtils;
4   import org.apache.poi.POIDocument;
5   import org.apache.poi.hslf.usermodel.HSLFSlideShow;
6   import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
7   import org.apache.poi.hssf.usermodel.HSSFWorkbook;
8   import org.apache.poi.hwpf.HWPFDocument;
9   import org.apache.poi.poifs.filesystem.POIFSFileSystem;
10  
11  import java.io.*;
12  
13  public class BinaryOfficeChecker extends FileChecker {
14      private static final boolean DEBUG = true;
15  
16      public BinaryOfficeChecker() {
17          super();
18      }
19  
20      @Override
21      public String[] getFileExtensions() {
22          return new String[]{"doc", "ppt", "xls"};
23      }
24  
25      @Override
26      public String getFileDescription() {
27          return "*.doc;*.ppt;*.xls";
28      }
29  
30      @Override
31      public String getDescription() {
32          return "Office File Checker(Binary formats)";
33      }
34  
35      @Override
36      public boolean prepareChecker() {
37          return true;
38      }
39  
40      @Override
41      public boolean checkPassword(String password) {
42          if (DEBUG) {
43              logger.info("checkPassword: " + password);
44          }
45  
46          boolean result = false;
47          Biff8EncryptionKey.setCurrentUserPassword(password);
48          try (FileInputStream fis = new FileInputStream(file);
49               POIFSFileSystem pfs = new POIFSFileSystem(fis)) {
50              String extension = FilenameUtils.getExtension(file.getName());
51              switch (extension) {
52                  case "xls" -> {
53                      try (POIDocument poiDocument = new HSSFWorkbook(pfs)) {
54                          logger.info("create workbook successfully: {}", poiDocument);
55                          result = true;
56                      }
57                  }
58                  case "doc" -> {
59                      try (POIDocument poiDocument = new HWPFDocument(pfs)) {
60                          logger.info("create document successfully: {}", poiDocument);
61                          result = true;
62                      }
63                  }
64                  case "ppt" -> {
65                      try (POIDocument poiDocument = new HSLFSlideShow(pfs)) {
66                          logger.info("create slideShow successfully: {}", poiDocument);
67                          result = true;
68                      }
69                  }
70                  default -> logger.error("Not supported: {}", file.getName());
71              }
72          } catch (Exception e) {
73              if (DEBUG) {
74                  logger.error("checkPassword: {}", e.getClass());
75              }
76          }
77          return result;
78      }
79  }